home *** CD-ROM | disk | FTP | other *** search
/ Scene Storm / Scene Storm - Volume 1.iso / coding / c / pdc / sample / append.c next >
C/C++ Source or Header  |  1990-04-06  |  2KB  |  78 lines

  1. /* append.c
  2.  *
  3.  * this is a quick and dirty little concatentaion program whose only claim
  4.  * to fame is that it APPENDS to its destination rather than truncating it
  5.  * on open.  for an example of how it can be used, see the makefile in the
  6.  * directory :lib/src, where it is used to concatenate object modules when
  7.  * building amiga.lib.
  8.  *
  9.  * the usage of this program is:
  10.  *
  11.  *    append <target> <file> ...
  12.  *
  13.  * the contents of all of the files listed after <target> get appended to
  14.  * the file <target>.  If the file <target> doesn't exist, it is created.
  15.  *
  16.  * written by Lionel Hummel (12 July 89)
  17.  * this code is in the public domain
  18.  */
  19.  
  20. #include <stdio.h>
  21.  
  22. #define BUFFER_SIZE    10240
  23. char buffer[BUFFER_SIZE];
  24.  
  25. extern FILE *fopen();
  26. extern int   fread();
  27. extern int   fwrite();
  28.  
  29. main(argc, argv)
  30. int argc;
  31. char *argv[];
  32. {
  33.     FILE *output;
  34.     FILE *input;
  35.     int   bytes_read = 0;
  36.     int   bytes_written = 0;
  37.  
  38.     if (--argc)  {
  39.  
  40.         output = fopen(*++argv, "a+");
  41.         if (output == (FILE *) NULL) {
  42.             fprintf(stderr, "Open error on %s; aborting\n", *argv);
  43.             exit(1);
  44.         }
  45.  
  46.         while (--argc) {
  47.  
  48.             input = fopen(*++argv, "r");
  49.             if (input == (FILE *) NULL) {
  50.                 fprintf(stderr, "Open error on %s; aborting\n", *argv);
  51.                 exit(1);
  52.             }
  53.  
  54.             while (!feof(input) && (bytes_written == bytes_read)) {
  55.                 bytes_read = fread(buffer, 1, BUFFER_SIZE, input);
  56.                 if (bytes_read != 0)
  57.                     bytes_written = fwrite(buffer , 1, bytes_read, output);
  58.                 else {
  59.                     fprintf(stderr, "Read error in file %s; aborting\n", *argv);
  60.                     exit(1);
  61.                 }
  62.             }
  63.  
  64.             if (ferror(output)) {
  65.                 fprintf(stderr, "Write error on file %s; aborting\n", *argv);
  66.                 exit(1);
  67.             }
  68.  
  69.             fclose(input);
  70.         }
  71.  
  72.         fclose(output);
  73.     }
  74.  
  75.     else
  76.         fprintf(stderr, "Usage:\t%s <target> <file1> ...\n", argv[0]);
  77. }
  78.